// 提交链接：https://leetcode.cn/problems/frequency-tracker/description/
// lc2671. 频率跟踪器
// 完成日期：2024/11/4
// c++ 哈希表 

class FrequencyTracker {
private:
    unordered_map<int, int> freqs;     // 统计每个数字出现的频数
    unordered_map<int, int> freqCounts;  // 统计每个频数出现的次数

public:
    FrequencyTracker() {}
    
    void add(int number) {
        freqs[number]++;    //增加一个数，频数+1
        freqCounts[freqs[number]]++;    //新频数出现的次数+1
        freqCounts[freqs[number]-1]--;  //旧频数出现的次数-1
    }
    
    void deleteOne(int number) {
        if(freqs[number] == 0) return;  // 如果number的频数为0，说明number不存在，直接退出
        freqs[number]--;                // 减少一个number，对应频数-1
        freqCounts[freqs[number]]++;    // 新频数出现的次数+1
        freqCounts[freqs[number] + 1]--;    // 旧频数出现的次数-1
    }
    
    bool hasFrequency(int frequency) {
        return freqCounts[frequency] > 0;    // 频数出现次数大于0，即存在频数
    }
};
